/*
 * StdImgButton.java
 *
 * Created on 27 de agosto de 2007, 16:09
 */

package SimpleControl;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import java.io.FileNotFoundException;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;

/**
 *
 * @author  fran
 */
public class SimpleIconButton extends JButton {
    
    private String path  = "";
    private Image img = null;
    
    /** Creates new form BeanForm */
    public SimpleIconButton() {
        //initComponents();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        setContentAreaFilled(false);
    }// </editor-fold>//GEN-END:initComponents
    
    @Deprecated
    @Override
    public void setIcon(Icon arg0)
    {
        super.setIcon(arg0);
        path = "";
        img = null;
    }
    
    /**
     * Dada una imagen, la redimensiona para que entre en un recuadro de tamaño (x,y) de forma que mantenga 
     * la estructura general
     * @return Imagen redimensionada
     */
    public Image redimImage(Image img, int x, int y)
    {
        ImageIcon imgIcon = new ImageIcon(img);
        float calc1 = (float)x/imgIcon.getIconWidth();
        float calc2 = (float)y/imgIcon.getIconHeight();
        
        calc1 = (calc1 > calc2) ? calc2 : calc1;
        
        calc1 = (calc1 == 0) ? 1 : calc1;
        
        return img.getScaledInstance((int)(calc1*imgIcon.getIconWidth()), (int)(calc1*imgIcon.getIconHeight()), java.awt.Image.SCALE_DEFAULT);
    }

    /**
     * Toma una entrada del sistema de ficheros en base a su path y lo establece como imagen del boton
     * reescalado para que entre en las dimensiones del boton sin deformar apreciablemente su geometria
     */
    public void setImgPath(String path) throws FileNotFoundException {
        setImgFile(new File(path));
    }
    
    public String getImgPath()
    {
        return path;
    }
    
    /**
     * Toma una entrada del sistema de ficheros y lo establece como imagen del boton
     * reescalado para que entre en las dimensiones del boton sin deformar apreciablemente su geometria
     */
    public void setImgFile(File fImg) throws FileNotFoundException {
        img = null;
        path = "";
        
        // Si no hay imagen no establecemos nada
        if (fImg.getName().equals(""))
        {
            super.setIcon(null);
            return ;
        }
        
        // Si el fichero no es accesible emitimos error
        if (!fImg.exists())
            throw new FileNotFoundException("Fichero no encontrado: " + fImg.getAbsolutePath());
        
        path = fImg.getAbsolutePath();
        img = Toolkit.getDefaultToolkit().getImage(path);
    }
    
    public File getImgFile()
    {
        return new File(path);
    }
    
    @Override
    public void paint(Graphics g)
    {
        if (img != null)
            super.setIcon(new ImageIcon(redimImage(img, this.getWidth(), this.getHeight())));
        
        super.paint(g);
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    // End of variables declaration//GEN-END:variables
}